package com.sk.ccflower.lib.util.json;

import java.io.IOException;
import java.io.Writer;

import com.sk.ccflower.lib.util.JSONUtil;

/**
 * JSON의 true 또는 false 값을 나타내는 클래스.
 * @author  dagui
 */
public class JSONBoolean extends JSONObject {

	private static final long serialVersionUID = 8253200156042210863L;
	
	public static final JSONBoolean TRUE = new JSONBoolean(true);
	public static final JSONBoolean FALSE = new JSONBoolean(false);
	private Boolean value;
	
	private JSONBoolean(boolean value) {
		this.value = (value)? Boolean.TRUE: Boolean.FALSE;
	}

	/**
	 * 지정한 값에 해당하는 JSONBoolean 인스턴스를 리턴한다.
	 */
	public static JSONBoolean getJSONBoolean(boolean value) {
		return (value)? JSONBoolean.TRUE: JSONBoolean.FALSE;
	}

	/**
	 * 지정한 값에 해당하는 JSONBoolean 인스턴스를 리턴한다.
	 */
	public static JSONBoolean getJSONBoolean(Boolean value) {
		return (value.booleanValue())? JSONBoolean.TRUE: JSONBoolean.FALSE;
	}

	/*
	 * implements JSONObject
	 */

	@Override
	public void writeJSON(Writer out) throws IOException {
		JSONUtil.writeJSON(value, out);
	}

	/**
	 * @return
	 */
	@Override
	public Object getValue() {
		return value;
	}

	/*
	 * imitate java.lang.Boolean
	 */

	/**
	 * 원시자료형 값을 리턴한다.
	 * @see Boolean#booleanValue()
	 */
	public boolean booleanValue() {
		return value.booleanValue();
	}

}
